查看原文
其他

如何清晰的理解从神经网络到人工智能这个概念?

傅一平 极市平台 2019-03-28
↑ 点击蓝字关注极市平台 识别先机 创造未来


来源:与数据同行



现在人工智能很热,但其底层往往就是神经网络的衍生,因此要理解现在的人工智能,首先得理解神经网络。


对于非专业人士讲,如果你要找一些神经网络的参阅材料看,估计会被一堆的公式绕晕,一般没人会告诉你神经网络是怎么来的,这个怎么来的不是指神经网络的发展历史,而是指思考过程,现实世界也没什么东西可以类比,反正就是一个黑盒子,这增加了一般人理解的门槛。


在Alphago大战李世石期间有大量的专家在直播中对于人工智能进行解释,但笔者发现大多解释完全不在点上,大家听了直播大多只知道了人工智能很厉害,但怎么个厉害法,完全不知道,笔者觉得这是因为诸如神经网络这类概念太难进行业务化的描述所致。


笔者至今也没办法在15秒的电梯时间用业务语言把神经网络的概念清晰的表达出来,但总想着尝试写出来,最好不用一个公式,就好比小学的时候不用方程式而用逻辑解题一样,这符合一般的思考过程。


理解一个概念的最好做法是写出来,如果大家能看懂,说明自己理解还不错,就让我们一起学习吧。


一、从神经细胞开始

 

我们人类对于人脑的研究还处于非常初级的阶段,我们创造的机器学习的神经网络算法其实跟大脑的神经网络原理一点关系都没有,最多是受到了一些启发而已,为了理解这个启发,我们先来看看大脑的神经细胞结构:





神经细胞可以分四个区,简单的理解就是树突接收信号,胞体决定脉冲信号,轴突传导信号,突触输出信号:


  • 接收区(receptive zone):为树突到胞体的部分,会有电位的变化,为阶梯性的生电,所谓阶梯性是指树突接受(接受器)不同来源的突触,如果接收的来源越多,对胞体膜电位的影响越大,反之亦然,而接受的讯息在胞体内整合。


  • 触发区(trigger zone):在胞体整合的电位,决定是否产生神经冲动的起始点,位于轴突和胞体交接的地方,也就是轴丘(axon hillock)的部分。


  • 传导区(conducting zone):为轴突的部分,当产生动作电位(action potential)时,传导区能遵守全有全无的定律(all or none)来传导神经冲动。


  • 输出区(output zone):神经冲动的目的就是要让神经末梢,突触的神经传递物质或电力释出,才能影响下一个接受的细胞(神经元、肌肉细胞或是腺体细胞),此称为突触传递。


以我们的视觉系统为例,大致来讲,当光线投射到视网膜后,视觉膜上的光感受细胞的突触直接与双极细胞相连,双极细胞突触则与最外层的节细胞相连,节细胞将动作电位传递到大脑。


我们的视网膜有大约1亿3千万个光感受细胞接收光信号,然后通过大约120万个节细胞轴突将信息从视网膜传递到大脑。


视觉系统使我们有了视知觉能力,将外部世界的二维投射重构为三维世界。人类的视觉系统可以毫不费力的识别出下面图片中的数字(当然还有文字),但如果让计算机来识别,就会明显感觉到视觉识别的困难。



我们不能简单地把“数字2像一只水面上的天鹅,数字7像一把锄头”这样的规则教给计算机。



因此,我们需要把手写识别的问题表述成计算机可以理解的方式,假设我们有5x5像素的图片来显示每个数字,例如数字2表示如下:



由于我们的神经网络是以数字组成向量作为输入的,所以我们将每个图片转换成长度为25的向量,其元素的值是1(“这个像素位于该图像中”)或0(“这个像素不在该图像中”),我们希望神经网络最终的输出是一个具体的数字,因此我们需要10个不同的输出结果。


例如,对于数字2,正确的输出结果将是[0,0,1,0,0,0,0,0,0,0],为什么要用这种向量形式表示2? 仅仅是因为训练方便,大家不要觉得奇怪。


那么,神经网络是如何把信息的输入转换成我们想要的输出的呢? 这里就是把一张输入图片识别成输出2。


二、理解分类器(也叫感知器,神经元)

 

感知器是一种二元分类器,它是神经网络的基石,假设分类器的输入是通过某种途径获得的两个值(比如体重和身高),输出是0和1,比如分别代表猫和狗。


现在有一些样本如下图所示,你可以认为横轴是身高,纵轴是体重,这里的不同颜色表示狗和猫:



大家想想,最简单地把这两组特征向量分开的方法是啥?当然是在两组数据中间画一条竖直线,直线左边是狗,右边是猫,分类器就完成了,以后来了新的向量,凡是落在直线左边的都是狗,落在右边的都是猫。


大家都知道平面上的直线方程是 ax+by+c=0,等式左边大于零和小于零分别表示点 (x,y), 在直线的一侧还是另一侧,把这个式子推广到 n 维空间里,直线的高维形式称为超平面,它的方程是:h=a1x1+a2x2+...+anxn=0。


神经元就是当 h 大于 0 时输出 1,h 小于 0 时输出 0 这么一个模型,它的实质就是把特征空间一切两半,认为两瓣分别属两个类,你恐怕再也想不到比这更简单的分类器了。


一条直线把平面一分为二,一个平面把三维空间一分为二,一个n-1维超平面把n维空间一分为二,两边分属不同的两类,这种分类器就叫做神经元。


下面,我们把神经元分类器的原理更形象化的表示,如下图所示,输入信号(树突接收)通过加权w(就是上面的a,b,c等参数),然后进入胞体整合转化(学术上叫作激活函数),得到一个输出信号,这个输出信号就是最后的识别结果。



下面我们用一个例子来说明,如下图所示:



输入以向量的形式表示x=(x_0, x_1, x_2),你可以把它们理解为不同的特征维度,其中的x_0是偏置单元(bias unit),相当于线性回归中的常数项。


在经过“神经元”(激活函数)的计算后,感知器会输出一个大于0或小于0的数,箭头上的数字代表每个特征的权量(weights),相当于线性回归模型的参数。


例如,上图列出了每个特征的权量,于是我们有这样的模型: hθ(x)=-3+2*x_1+2*x_2 当x_1和x_2同时为1时,输出为1,而不同时都将得到负数,这实际上就是逻辑与或称为与门, 我们将正数和负数通过激活函数(0-1阶跃函数)进行0-1分类,这是一个单层的感知器。



单个感知器有两个显著缺点,首先它把直线一侧变为0,另一侧变为1,这类线性函数无法进行异或等操作(比如输入1,0或0,1,要求输出为1,你会发现单个感知器是无法做到的,意味着这种感知器表达能力有限),另一个缺点是:它只能切一刀!你给我说说一刀怎么能把下面图里面的这两类分开吧。



解决办法是将多个感知器层层级联,底层的输出是高层的输入,这就构成了神经网络,我们可以在中间横着砍一刀,竖着砍一刀,然后把左上和右下的部分合在一起,与右上的左下部分分开;也可以围着左上角的边,沿砍10刀把这一部分先挖出来,然后和右下角合并。


这和人脑中的神经元很相似,每一个神经元都有一些神经元作为其输入,又是另一些神经元的输入,数值向量就像是电信号,在不同神经元之间传导,每一个神经元只有满足了某种条件才会发射信号到下一层神经元,神经网络的分类表达能力是极其强大的。



三、理解神经网络

 

神经网络是由一层一层构建的,那么每层究竟在做什么?

数学式子:Y=a(W*X+B)

X是输入向量,Y是输出向量,B是偏移向量,W是权重矩阵,a()是激活函数,每一层仅仅是把输入X经过如此简单的操作得到Y。


通过如下5种对输入空间(输入向量的集合)的操作,完成输入空间 ——> 输出空间的变换。

1.升维/降维

2.放大/缩小

3.旋转

4.平移

5.弯曲


这5种操作中,1,2,3的操作由W*X完成,4的操作由B完成,5的操作则有a()来实现。每层神经网络的数学理解:用线性变换跟随着非线性变化,将输入空间投向另一个空间。


我们还可以从物理的角度来理解这个过程,W*X的理解就是通过组合形成新物质,a()又符合了我们所处的世界都是非线性的特点。



如果权重W的数值如下,那么网络的输出Y就会是三个新物质,[二氧化碳,臭氧,一氧化碳]:



也可以减少右侧的一个节点,并改变权重W,输出就会是两个新物质:



如果希望通过层网络能够从[C, O]空间转变到 [CO2,O3,CO]空间的话,那么网络的学习过程就是将W的数值变成尽可能接近第一个式子的过程,请回忆监督学习的训练过程,通过已知样本的输入输出训练得到权重参数,神经网路也一样,如果再加一层,就是通过组合 [CO2,O3,CO]这三种基础物质,形成若干更高层的物质。



从分子层面继续迭代这种组合思想,可以形成DNA,细胞,组织,器官,最终可以形成一个完整的人。继续迭代还会有家庭,公司,国家等。这种现象在身边随处可见。并且原子的内部结构与太阳系又惊人的相似,不同层级之间都是以类似的几种规则再不断形成新物质。


重要的是这种组合思想,组合成的东西在神经网络中并不需要有物理意义。


四、神经网络的训练

 

知道了神经网络的学习过程就是学习控制着空间变换方式(物质组成方式)的权重矩阵后,接下来的问题就是如何学习每一层的权重矩阵W。


既然我们希望网络的输出尽可能的接近真正想要预测的值。那么就可以通过比较当前网络的预测值和我们真正想要的目标值,再根据两者的差异情况来更新每一层的权重矩阵(比如,如果网络的预测值高了,就调整权重让它预测低一些,不断调整,直到能够预测出目标值)。


因此就需要先定义“如何比较预测值和目标值的差异”,这便是损失函数或目标函数(loss function or objective function),用于衡量预测值和目标值的差异的方程。loss function的输出值(loss)越高表示差异性越大,那神经网络的训练就变成了尽可能的缩小loss的过程。


所用的方法是梯度下降(Gradient descent):通过使loss值向当前点对应梯度的反方向不断移动,来降低loss,一次移动多少是由学习速率(learning rate)来控制的,下图的X,Y轴表示的是两个权重参数,Z轴就是LOSS,追求的就是选择合适的X,Y方向,让Z变得最小,图中的红线就是寻找最合适参数的过程,也就是沿着梯度的反方向寻找最低点。



这里就会涉及到反向传播算法:最开始输入层输入特征向量,网络层层计算获得输出,输出层发现输出和正确的类号不一样,这时它就让最后一层神经元进行参数调整,最后一层神经元不仅自己调整参数,还会勒令连接它的倒数第二层神经元调整,层层往回退着调整。


经过调整的网络会在样本上继续测试,如果输出还是老分错,继续来一轮回退调整,直到网络输出满意为止,流程图见下,逻辑非常清晰:



收集训练集(train data):也就是同时有input以及对应label的数据。每个数据叫做训练样本(sample)。label也叫target,也是机器学习中最贵的部分。上图表示的是我的数据库。假设input本别是x的维度是39,label的维度是48。


设计网络结构(architecture):确定层数、每一隐藏层的节点数和激活函数,以及输出层的激活函数和损失函数。上图用的是两层隐藏层(最后一层是输出层)。


隐藏层所用激活函数a( )是ReLu,输出层的激活函数是线性linear(也可看成是没有激活函数)。隐藏层都是1000节点。损失函数L( )是用于比较距离MSE:mean((output - target)^2),MSE越小表示预测效果越好。训练过程就是不断减小MSE的过程。


五、神经网络的分类案例

 

垃圾邮件识别:现在有一封电子邮件,把出现在里面的所有词汇提取出来,送进一个机器里,机器需要判断这封邮件是否是垃圾邮件,解决方案就是输入表示字典里的每一个词是否在邮件中出现。


比如向量(1,1,0,0,0......)就表示这封邮件里只出现了两个词abandon和abnormal,输出1则表示邮件是垃圾邮件,输出0则说明邮件是正常邮件。


猫狗分类:有一大堆猫、狗照片,把每一张照片送进一个机器里,机器需要判断这幅照片里的东西是猫还是狗,假如每一张照片都是320*240像素的红绿蓝三通道彩色照片,那么分类器的输入就是一个长度为320*240*3=230400的向量,输出0表示图片中是狗,输出1表示是猫。


六、从神经网络到人工智能

 

现在的人工智能狭义理解就是四类学习算法,深度学习,强化学习,对抗学习,迁移学习,他们或多或少的都用到了神经网络,这里简要介绍下:


  • (1)深度学习很容易理解,就是有多个隐藏层的神经网络:



已经证明,任何复杂的函数都可以通过构建深度神经网络来计算,万事万物、任何样本都可以通过构建一个足够深度的神经网络来拟合,深度学习如果足够快,任何其他机器学习都可以放弃,当然也就是这么一说。


深度学习跟机器学习有什么区别呢?


深度学习是一种特殊的机器学习,在机器学习中特征选择部分一般需要人的先验知识的介入来设计好的特征提取方法。


比如判断一张图片是否是猫,首先要定义一些特征,比如该动物是否有胡须、耳朵;如果有耳朵,那么耳朵是否是尖的,然后让系统识别出在动物中是否有这些重要特征,而深度学习会一次性完成这些任务,深度学习会自动找到对分类任务重要的特征,而机器学习不得不人工指定。




深度学习将现实世界表示为嵌套的层次概念体系(由较简单概念间的联系定义复杂概念,从一般抽象概括到高级抽象表示),从而获得强大的性能与灵活性,这其实在介绍神经网络层次的概念中已经提及了。


以人脸识别为例,都是先找到边缘,然后找到菱角,再从棱角到五官,再从五官到识别不同的人脸,而且所有的特征查找都是机器自动完成的。


深度学习在图像识别(比如人脸识别)等领域有了超出人的表现,但万变不离其宗,最核心的仍然是基础的神经网络思想,只不过在神经网络架构设计(比如引入局部感知的卷积滤波器)、超参数(比如步长,层数)、激活函数等选择方面呈现了百花齐放的局面,比如Alphago通过设计策略和评价两个卷积神经网络给出了惊人的表现,在工程上能力超强。


  • (2)强化学习


强化学习是通过对未知环境一边探索一边建立环境模型以及学得一个最优策略,无论是人类学走步、鹦鹉走钢丝还是无人驾驶汽车都应用到了强化学习。


传统机器学习假设算法本身对于环境无影响,强化学习破除了这个限制,能够考虑到了算法对于环境的影响, 这使得强化学习特别适合解决多回合博弈或者顺序决策问题(sequential decision making)问题。


事实上,这类问题在生活中是非常普遍的,比如股市的交易,传统机器学习可以预测股票价格,但是只有不使用结果进行买卖模型才会长期有效,如果你预测完了之后你根据据预测结果去做多或着做空这个股票,那么其他的股票买家可能因为你的行为改变了自身行为,你原来的训练的模型便会失效,而强化学习可以考虑到这点,传统机器学习则可以当作有很大时延的强化学习。


在强化学习中,数据是在运行过程中自主收集,这解决了机器学习中常见的训练数据难于获取的问题,AlphaGo Zero之所以能够完全摒弃人类知识就是因为所有的数据都是通过机器互博生成,从这个意义上来说,强化学习的算法具有自主学习能力的。


当然AlphaGo Zero的训练的基础也是神经网络,只是网络架构跟AlphaGo不同,其将策略和评价两个神经网络合二为一了,并且抛弃了卷积网络而采用resnet。


如果没看懂也没关系,因为自己也是泛泛而谈,等研究透了再专门写一篇。


  • (3)迁移学习


迁移学习顾名思义就是就是把已学训练好的模型参数迁移到新的模型来帮助新模型训练,比如一个会打乒乓球的人比没有经验的人更容易接受网球;会骑自行车的人能更快学习骑电动车等等,迁移学习其实就在你身边,下图显示了利用迁移学习可以方便的识别不同类别的狗。



  • (4)对抗学习


知乎上用一个例子很形象的说明了对抗学习网络的原理:


男:哎,你看我给你拍的好不好?

女:这是什么鬼,你不能学学XXX的构图吗?

男:哦

...

男:这次你看我拍的行不行?

女:你看看你的后期,再看看XXX的后期吧,呵呵

男:哦

...

男:这次好点了吧?

女:呵呵,我看你这辈子是学不会摄影了

...

男:这次呢?

女:嗯,我拿去当头像了


上面这段对话讲述了一位“男朋友摄影师”的成长历程。很多人可能会问:这个故事和生成式对抗网络(GAN)有什么关系?其实,只要你能理解这段故事,就可以了解生成式对抗网络的工作原理。


生成对抗网络通过生成网络与判别网络两个神经网络相互博弈的方式进行学习,生成网络生成真假难辨的数据,尽可能让判别网络无法识别真假,判别网络则尽可能将真相识别出来,直到判别网络无法判断生成网络的输出结果是否真实,上面的例子中,男的是生成网络,女的是判别网络,XXX是真相数据。


比如下面通过对抗学习打造了以假乱真的新图片。



下图通过对抗学习将三个人物的头像混合创造了兼具三者特点的新图片:



前段时间笔者还看到了有个APP可以将人的照片模拟成毕加索画的风格,笔者突然想到了如果把夫妻的头像输入对抗网络训练,是否能得到自己孩子未来长大的样子啊?现在对抗学习是人工智能的一个热点。


以上的信息均来自于知乎、CSDN等各种网站,笔者只是知识的搬运工,唯一做的就是找到了这些价值信息并按照一定的逻辑把它们重新串接在一起,希望对你理解当下神经网络,人工智能的概念有所帮助。



*推荐文章*



PS.极市平台正寻求与开发者视觉算法的合作,欢迎联系小助手(微信:Extreme-Vision)沟通合作~   填写表单http://form.mikecrm.com/wcotd9,即可加入极市CV开发者群,与CV大牛切磋交流~


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存